/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBIndexBuffer.h
 ***********************************************************************************************************/

#ifndef __RBINDEXBUFFER_H__
#define __RBINDEXBUFFER_H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBIndexBuffer.h)
#endif

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include "RBHardwareBuffer.h"
#include "RBTextureType.h"
#include "RBStream.h"

/***********************************************************************************************************
 * Forward declarations
 ***********************************************************************************************************/

/***********************************************************************************************************
 * Classes
 ***********************************************************************************************************/

class RBIndexBuffer : public RBHardwareBuffer
{
    RBDeclareRTTI(RBIndexBuffer, RBHardwareBuffer);
    RBDeclareHBSerializable(RBIndexBuffer);
public:

                                RBIndexBuffer       (uint32 uiUsage, uint32 uiMemPoolMask, RBHardwareBufferManager* pCreator, RBIndexBufferType::EType eIndexType, uint32 uiIndexCount, void* pNative);
    virtual                    ~RBIndexBuffer       ();


    RBIndexBufferType::EType    GetIndexType        () const;
    uint32                      GetIndexCount       () const;

    virtual void*               Map                 (MapType);
    virtual void                Unmap               ();

private:
    uint32                      m_uiIndexCount;
    RBIndexBufferType::EType    m_eIndexType;
};

RBDeclareSmartPointer(RBIndexBuffer);

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
inline RBIndexBufferType::EType RBIndexBuffer::GetIndexType() const
{
    return m_eIndexType;
}

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
inline uint32 RBIndexBuffer::GetIndexCount() const
{
    return m_uiIndexCount;
}

/***********************************************************************************************************/

#endif // __RBINDEXBUFFER_H__